package com.qdd.freight.util;//package com.qdd.util;
//
//import org.springframework.context.ApplicationContext;
//import org.springframework.context.ApplicationContextAware;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.stereotype.Component;
//
///** 代码可用
// * @ClassName BeanTool
// * @Description TODO
// * @Author yanpeihao
// * @Date 2019/12/6 22:13
// * @Version 1.0
// * 1.如果启动项目后报错 "applicaitonContext属性为null,请检查是否注入了SpringContextHolder!"，因为SpringContextHolder中的applicationContext为空，猜测是SpringContextHolder这个bean没有在UserRole这个bean加载前进行加载，导致没有加载完成，所以我们需要在配置文件中首先加载SpringContextHolder。把<bean id="springContextHolder" class="com.utils.SpringContextHolder" lazy-init="false"/>放在配置文件的第一个加载位置，再启动项目发现正常。
// * 2.在使用该类静态方法时必须保证spring加载顺序正确，也可以通过在使用类上添加 @DependsOn(“springContextHolder”)，确保在此之前 SpringContextHolder 类已加载！
// **/
//@Component
//@Lazy(false)
//public class BeanTool  implements ApplicationContextAware  {
//    private static ApplicationContext applicationContext;
//    /**
//     * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
//     */
//    public void setApplicationContext(ApplicationContext applicationContext) {
//        this.applicationContext = applicationContext;
//    }
//
//    /**
//     * 取得存储在静态变量中的ApplicationContext.
//     */
//    public static ApplicationContext getApplicationContext() {
//        checkApplicationContext();
//        return applicationContext;
//    }
//
//    /**
//     * 检查ApplicationContext不为空
//     * 不需要设置applicationContext.xml,原因参见：
//     * https://blog.csdn.net/chenyiminnanjing/article/details/78618847
//     */
//    private static void checkApplicationContext() {
//        if (applicationContext == null) {
//            throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
//        }
//    }
//
//    /**
//     * 从静态变量ApplicationContext中取得Bean,
//     * 自动转型为所赋值对象的类型.
//     */
//    @SuppressWarnings("unchecked")
//    public static <T> T getBean(String name) {
//        checkApplicationContext();
//        return (T) applicationContext.getBean(name);
//    }
//
//    /**
//     * 从静态变量ApplicationContext中取得Bean,
//     * 自动转型为所赋值对象的类型.
//     */
//    @SuppressWarnings("unchecked")
//    public static <T> T getBean(Class<T> clazz) {
//        checkApplicationContext();
//        return (T) applicationContext.getBeansOfType(clazz);
//    }
//
//    /**
//     * 清除applicationContext静态变量.
//     */
//    public static void cleanApplicationContext() {
//        applicationContext = null;
//    }
//}